package cn.mes.module.mes.service.basemachineinfo;

import java.util.*;
import javax.validation.*;
import cn.mes.module.mes.controller.admin.basemachineinfo.vo.*;
import cn.mes.module.mes.dal.dataobject.basemachineinfo.BaseMachineInfoDO;
import cn.mes.module.mes.dal.dataobject.basemachineinfo.BaseDeviceDataDO;
import cn.mes.framework.common.pojo.PageResult;
import cn.mes.framework.common.pojo.PageParam;
import cn.mes.module.mes.dal.dataobject.basemachineinfo.BaseMachinePeopleInfoDO;

/**
 * 机台产线基础信息 Service 接口
 *
 * @author 游创
 */
public interface BaseMachineInfoService {

    /**
     * 创建机台产线基础信息
     *
     * @param createReqVO 创建信息
     * @return 编号
     */
    String createBaseMachineInfo(@Valid BaseMachineInfoSaveReqVO createReqVO);

    /**
     * 更新机台产线基础信息
     *
     * @param updateReqVO 更新信息
     */
    void updateBaseMachineInfo(@Valid BaseMachineInfoSaveReqVO updateReqVO);


    /**
     * 批量更新机台产线基础信息
     *
     * @param baseMachineInfoDOList 更新信息
     */
    void updateBaseMachineInfoBatch(@Valid List<BaseMachineInfoDO> baseMachineInfoDOList);
    /**
     * 删除机台产线基础信息
     *
     * @param id 编号
     */
    void deleteBaseMachineInfo(String id);

    /**
     * 获得机台产线基础信息
     *
     * @param id 编号
     * @return 机台产线基础信息
     */
    BaseMachineInfoDO getBaseMachineInfo(String id);

    /**
     * 获得机台产线基础信息
     *
     * @return 机台产线基础信息
     */
    List<BaseMachineInfoDO> getBaseMachineInfoList();
    /**
     * 获得机台产线基础信息
     *
     * @return 机台产线基础信息
     */
    List<BaseMachineInfoDO> getBaseMachineInfoListByRegionId(String regionId);

    /**
     * 获得机台产线基础信息分页
     *
     * @param pageReqVO 分页查询
     * @return 机台产线基础信息分页
     */
    PageResult<BaseMachineInfoDO> getBaseMachineInfoPage(BaseMachineInfoPageReqVO pageReqVO);

    // ==================== 子表（设备数据） ====================

    /**
     * 获得设备数据分页
     *
     * @param pageReqVO 分页查询
     * @param deviceId 设备ID
     * @return 设备数据分页
     */
    PageResult<BaseDeviceDataDO> getBaseDeviceDataPage(PageParam pageReqVO, String deviceId);

    /**
     * 创建设备数据
     *
     * @param baseDeviceData 创建信息
     * @return 编号
     */
    String createBaseDeviceData(@Valid BaseDeviceDataDO baseDeviceData);


    /**
     * 创建设备数据
     *
     * @param baseDeviceDataDOList 创建信息
     * @return 编号
     */
    boolean createBaseDeviceDataBatch(@Valid List<BaseDeviceDataDO> baseDeviceDataDOList);

    /**
     * 更新设备数据
     *
     * @param baseDeviceData 更新信息
     */
    void updateBaseDeviceData(@Valid BaseDeviceDataDO baseDeviceData);

    /**
     * 删除设备数据
     *
     * @param id 编号
     */
    void deleteBaseDeviceData(String id);

	/**
	 * 获得设备数据
	 *
	 * @param id 编号
     * @return 设备数据
	 */
    BaseDeviceDataDO getBaseDeviceData(String id);


    // ==================== 子表（机台负责人员信息） ====================

    /**
     * 获得机台负责人员信息分页
     *
     * @param pageReqVO 分页查询
     * @param machineId 机台信息ID
     * @return 机台负责人员信息分页
     */
    PageResult<BaseMachinePeopleInfoDO> getBaseMachinePeopleInfoPage(PageParam pageReqVO, String machineId);

    /**
     * 创建机台负责人员信息
     *
     * @param baseMachinePeopleInfo 创建信息
     * @return 编号
     */
    String createBaseMachinePeopleInfo(@Valid BaseMachinePeopleInfoDO baseMachinePeopleInfo);

    /**
     * 更新机台负责人员信息
     *
     * @param baseMachinePeopleInfo 更新信息
     */
    void updateBaseMachinePeopleInfo(@Valid BaseMachinePeopleInfoDO baseMachinePeopleInfo);

    /**
     * 删除机台负责人员信息
     *
     * @param id 编号
     */
    void deleteBaseMachinePeopleInfo(String id);

    /**
     * 获得机台负责人员信息
     *
     * @param id 编号
     * @return 机台负责人员信息
     */
    BaseMachinePeopleInfoDO getBaseMachinePeopleInfo(String id);

}